package py.edu.ucom.poo.waterloo.agente;

import java.util.Random;

import py.edu.ucom.poo.waterloo.Ficha;
import py.edu.ucom.poo.waterloo.Movimiento;
import py.edu.ucom.poo.waterloo.SandBox;
import py.edu.ucom.poo.waterloo.Tablero;
import py.edu.ucom.poo.waterloo.WaterlooApplicationException;
import py.edu.ucom.poo.waterloo.WaterlooLogicException;

/**
 * 
 * @author root
 */
public class AgenteTest2 extends AgenteTest
{
    public void generarDatos(Estado estadoNuevo)
    {
        int countCantidadFichasAntes = 0;
        for (int i = 0; i < 10; i++){
            for (int j = 0; j < 10; j++){
                if (mapaInterno.getCasillaDelTablero(i, j).getFicha().getColor() == this.getColor()){
                    countCantidadFichasAntes++;
                }
            }
        }
        estadoNuevo.setPiezasAntes(countCantidadFichasAntes);
        int countCantidadDeFichasDespues = 0;
        for (int i = 0; i < 10; i++){
            for (int j = 0; j < 10; j++){
                if (estadoNuevo.getT().getCasillaDelTablero(i, j).getFicha().getColor() == this.getColor()){
                    countCantidadDeFichasDespues++;
                }
            }
        }
        estadoNuevo.setPiezas(countCantidadDeFichasDespues);
    }
    void moverColumna(Estado estadoAnterior, int i, int j, int incremento, int nivelProfundidadActual, int nivelProfunidadMaximo)
    {
        if (i + incremento < 10 && i + incremento >= 0)
        {
            nivelProfundidadActual++;
            Estado estadoNuevo = new Estado();
            estadoNuevo.getM().setOrigen(estadoAnterior.getT().getCasillaDelTablero(i, j));
            estadoNuevo.getM().setDestino(estadoAnterior.getT().getCasillaDelTablero(i + incremento, j));
            try
            {
                Tablero nuevoTablero = sandBoxInterface.getTablero(estadoAnterior.getT(), estadoNuevo.getM());
                //this.imprimirTablero(estadoAnterior.getT());
                if (incremento==POSITIVO && this.getColor()==SandBox.COLOR_BLUE){//exclusivamenete suma si va para adelante
                	//estadoNuevo.setUp(this.randomico(2));
                	estadoNuevo.setPeso(5);

    			}
                if (incremento==NEGATIVO && this.getColor()==SandBox.COLOR_RED){
                	//estadoNuevo.setUp(this.randomico(2));
                	estadoNuevo.setPeso(5);

                }
                estadoNuevo.setT(nuevoTablero);
                this.generarDatos(estadoNuevo);
                estadoAnterior.agregarHijo(estadoNuevo);
                estadoNuevo.setAnterior(estadoAnterior);
                if (nivelProfundidadActual < nivelProfunidadMaximo)
                {
                    generarTableros(estadoNuevo, nivelProfundidadActual, nivelProfunidadMaximo);
                }
                else
                {
                    asignarPeso(estadoNuevo,this);
                }
            } catch (WaterlooLogicException e)
            {
            //no se hace nada porque significa que el tablero no es valido y se descarta la rama
            }
        }
    }

    void moverFila(Estado estadoAnterior, int i, int j, int incremento, int nivelProfundidadActual, int nivelProfunidadMaximo)
    {
        if (j + incremento < 10 && j + incremento >= 0)
        {
            nivelProfundidadActual++;
            Estado estadoNuevo = new Estado();
            estadoNuevo.getM().setOrigen(estadoAnterior.getT().getCasillaDelTablero(i, j));
            estadoNuevo.getM().setDestino(estadoAnterior.getT().getCasillaDelTablero(i, j + incremento));
            try
            {
                Tablero nuevoTablero = sandBoxInterface.getTablero(estadoAnterior.getT(), estadoNuevo.getM());
                estadoNuevo.setT(nuevoTablero);
                this.generarDatos(estadoNuevo);
                estadoAnterior.agregarHijo(estadoNuevo);
                estadoNuevo.setAnterior(estadoAnterior);
                if (nivelProfundidadActual < nivelProfunidadMaximo)
                {
                    generarTableros(estadoNuevo, nivelProfundidadActual, nivelProfunidadMaximo);
                }
                else
                {
                    asignarPeso(estadoNuevo,this);
                }
            } catch (WaterlooLogicException e)
            {
            //no se hace nada porque significa que el tablero no es valido y se descarta la rama
            }
        }
    }
}
